home *** CD-ROM | disk | FTP | other *** search
/ Carros Gold / Carros Gold 2.ISO / gpm / edgpn.mst < prev    next >
Text File  |  1996-01-31  |  13KB  |  422 lines

  1. '' ****************************************************************
  2. '* GPM.MST - F1 GPM Normal Install Setup Script
  3. '**************************************************************************
  4.     
  5.     '' Global variables
  6.  
  7.     GLOBAL Lang$
  8.     GLOBAL SrcMainDir$
  9.     GLOBAL SrcDrive$
  10.     GLOBAL TitleShortName$
  11.     GLOBAL TitleLongName$
  12.     GLOBAL PromptForPath%
  13.     GLOBAL DefaultPath$
  14.     GLOBAL ProgManGroup$
  15.     GLOBAL ProgManItem$
  16.     GLOBAL szTitleDir$
  17.  
  18.     '' WinG globals
  19.     
  20.     GLOBAL DEST$        ''Default destination directory.
  21.     GLOBAL bInstallDVA%
  22.  
  23. '' ****************************************************************
  24. '' ** Setup Variables
  25. '' ****************************************************************
  26.  
  27.  TitleShortName$ = "Grand Prix Manager - Demonstration"
  28.  TitleLongName$  = "Grand Prix Manager - Demonstration"
  29.     PromptForPath%  = 1              '' we prompt for the install path
  30.     DefaultPath$    = "C:\MPS\GPM"   '' default install path when prompt is displayed   
  31.     ProgManGroup$   = "MicroProse"  '' program manager group 
  32.  ProgManItem$    = "Grand Prix Manager - Demonstration"                      '' program manager item title
  33.     
  34. '***********************************************************************
  35. '** Mainline
  36. '***********************************************************************
  37.  
  38.     GLOBAL CUIDLL$
  39.  
  40.     '' Include files
  41.     '$INCLUDE 'setupapi.inc'
  42.     CUIDLL$ = "mscuistf.dll"  '' Custom UI dll
  43.     '$INCLUDE 'msdetect.inc'   
  44.     
  45.     '' Dialog ID's
  46.     CONST DESTPATH      = 1000
  47.     CONST APPHELP       = 2000
  48.     CONST TOOBIG        = 3000
  49.     CONST BADPATH       = 4000
  50.     CONST SUCCESS       = 5000
  51.     CONST CONT_PH_SETUP = 101
  52.     CONST EXIT_PH_SETUP = 102
  53.  
  54.     '' WinG DLG ID's
  55.     CONST CHECK         = 2500
  56.     CONST EXITSUCCESS   = 700
  57.     CONST EXITFAILURE   = 400
  58.     CONST EXITQUIT      = 600
  59.     
  60.     CONST LOGO = 100   '' bitmap resource id
  61.     
  62.     '' Functions and subroutines
  63.     DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  64.     DECLARE FUNCTION GetTitleDir (szDefault$) AS STRING
  65.     DECLARE FUNCTION CopyFiles(szTitleDir$) AS INTEGER
  66.     DECLARE SUB ModifyProgramManager
  67.     DECLARE SUB ShowSuccess
  68.     
  69.     '' functions from WinG install
  70.     DECLARE FUNCTION GetRealWindowsSysDir AS STRING
  71.     DECLARE SUB UpdateWinG32 (szOrig$) 
  72.     DECLARE FUNCTION OnWin3x LIB "setuphlp.DLL" AS INTEGER
  73.     DECLARE FUNCTION VflatdPresent LIB "setuphlp.DLL" AS INTEGER
  74.     DECLARE FUNCTION GetRealSystemDir LIB "setuphlp.DLL" (szDir$,cbBuf%) AS INTEGER
  75.     DECLARE FUNCTION IsWin32FileNewer LIB "setuphlp.DLL" (szOrig$,szNew$) AS INTEGER
  76.     DECLARE SUB RenameFilePlease LIB "setuphlp.DLL" (szOrig$,szNew$) 
  77.  
  78.     '' return value displayer for debug purposes
  79.     ''i% = DoMsgBox(STR$(i%), "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  80.  
  81. INIT:
  82.     bInstallDVA% = 0
  83.     
  84.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  85.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  86.  
  87.     '' Set the title and banner bitmap. You must rebuild MSCUISTF.DLL to 
  88.     '' alter the banner bitmap.
  89.     
  90.  SetTitle "Grand Prix Manager - Demonstration"
  91.     SetBitmap CUIDLL$, LOGO 
  92.     
  93.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  94.     IF szInf$ = "" THEN
  95.         szInf$ = GetSymbolValue("STF_CWDDIR") + "wing.inf"
  96.     END IF
  97.  
  98.     ReadInfFile szInf$
  99.  
  100. CHECK:
  101.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  102.     SrcDrive$ = MID$(SrcDir$,1,1)
  103.     SrcMainDir$ = SrcDrive$+":\GPM\"
  104.     SrcDir$ = SrcDrive$+":\GPM\SYSTEM\"
  105.  
  106.     DEST$ = GetWindowsSysDir
  107.     AddSectionFilesToCopyList "runtime", SrcDir$, DEST$
  108.     '
  109.     ' only use DVA on Windows 3.x
  110.     '
  111.     IF OnWin3x() = 1 THEN
  112.         AddSectionFilesToCopyList "dva", SrcDir$, DEST$
  113.         IF VflatdPresent() = 0 THEN
  114.         CreateSysIniKeyValue GetWindowsDir + "system.ini", "386Enh", "device", GetWindowsSysDir+"dva.386", cmoOverwrite
  115.         bInstallDVA% = 1
  116.         END IF
  117.     END IF
  118.     
  119.     DEST$ = GetRealWindowsSysDir
  120.     AddSectionFilesToCopyList "wing32", SrcDir$, DEST$
  121.     Dest1$ = MakePath(DEST$,"wing32.dll")
  122.     Dest2$ = MakePath(DEST$,"wing32.xxx")
  123.     RenameFilePlease Dest1$,Dest2$
  124.     CopyFilesInCopyList
  125.     UpdateWinG32 GetRealWindowsSysDir()
  126.  
  127. GPM:
  128.     '' now install GPM files
  129.     
  130.     '' The following statement turns size checking off. Set it to scmOnFatal 
  131.     '' to enable size checking, where Setup will compare the disk file size 
  132.     '' with the INF file size and report an error if they are not the same.
  133.     
  134.     i% = SetSizeCheckMode(scmOff)
  135.     
  136.     '' Read in the INF file.
  137.     
  138.  ReadInfFile SrcMainDir$ + "EDGPN.INF"
  139.  
  140.     '' Decide where to put title files
  141.     IF PromptForPath% = 1 THEN
  142.         szTitleDir$ = GetTitleDir(DefaultPath$)
  143.         IF szTitleDir$ = "" THEN
  144.             ERROR STFQUIT
  145.             GOTO QUIT
  146.         ENDIF
  147.     ELSE
  148.         ''szTitleDir$ = GetWindowsDir()
  149.  szTitleDir$ = "C:\MPS\GPM"
  150.     ENDIF   
  151.  
  152.  ''szTitleDir$=MID$(szTitleDir$,1,3)+"MPS\"+MID$(szTitleDir$,4)
  153.  
  154.     '' add game path direction entry to the gpm ini file
  155.     CreateIniKeyValue GetWindowsDir+"GPMMICP.INI","GPM_PATHS","GAME",szTitleDir$,cmoOverwrite
  156.     
  157.     Lang$ = GetIniKeyString(GetWindowsDir+"GPMMICP.INI","GPM_LANGUAGE","TONGUE") 
  158.     
  159.     '' Copy files
  160.     IF CopyFiles(szTitleDir$) = 0 THEN
  161.         GOTO QUIT
  162.     ENDIF
  163.     
  164.     ModifyProgramManager    
  165.     ShowSuccess
  166.     END
  167.  
  168. QUIT:
  169.     ON ERROR GOTO ERRQUIT
  170.  
  171.     IF ERR = 0 THEN
  172.         dlg% = EXITSUCCESS
  173.     ELSEIF ERR = STFQUIT THEN
  174.         dlg% = EXITQUIT
  175.     ELSEIF ERR = EXIT_PH_SETUP THEN
  176.         dlg% = EXIT_PH_SETUP
  177.     ELSE
  178.         dlg% = EXITFAILURE
  179.     END IF
  180.         
  181.     ''i% = DoMsgBox(STR$(ERR)+" "+STR$(dlg%), "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  182.     
  183.     UIPop 1
  184.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfoDlgProc", 0, "")
  185.     END
  186.  
  187. ERRQUIT:
  188.     i% = DoMsgBox("Setup sources were corrupted, call Microprose", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  189.     END
  190.     
  191.  
  192. '*************************************************************************
  193. '** Purpose:
  194. '**     Prompts the user for a path for the title files
  195. '** Arguments:
  196. '**     szDefault$ - default path
  197. '** Returns:
  198. '**     New valid path name, or "" if the user quit.
  199. '*************************************************************************
  200.  
  201. FUNCTION GetTitleDir (szDefault$) STATIC AS STRING
  202.  
  203.     SetSymbolValue "String", TitleShortName$
  204.     SetSymbolValue "EditTextIn", szDefault$
  205.     SetSymbolValue "EditFocus", "ALL"
  206.  
  207.     GETPATH:
  208.  
  209.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, "FHelpDlgProc")
  210.  
  211.     IF sz$ = "CONTINUE" THEN
  212.         szTitleDir$ = GetSymbolValue("EditTextOut")
  213.         IF IsDirWritable(szTitleDir$) = 0 THEN
  214.  
  215.             BADPATH:
  216.  
  217.             sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfoDlgProc", 0, "")
  218.             IF sz$ = "REACTIVATE" THEN
  219.                 GOTO BADPATH
  220.             END IF
  221.             UIPop 1
  222.             GOTO GETPATH
  223.         END IF
  224.         UIPop 1
  225.         CreateDir szTitleDir$, cmoNone
  226.  
  227.     ELSEIF sz$ = "REACTIVATE" THEN
  228.         GOTO GETPATH
  229.     ELSE
  230.         szTitleDir$ = ""
  231.  
  232.     END IF
  233.  
  234.     GetTitleDir = szTitleDir$
  235.  
  236. END FUNCTION
  237.  
  238.  
  239. '*************************************************************************
  240. '** Purpose:
  241. '**     Copies the files in the INF file
  242. '** Arguments:
  243. '**     szTitleDir$ - destination directory for the title files
  244. '** Returns
  245. '**     1 if files were copied, 0 otherwise
  246. '*************************************************************************
  247.  
  248. FUNCTION CopyFiles(szTitleDir$) STATIC AS INTEGER
  249. ''i% = DoMsgBox("Copy Files", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  250.  
  251.     '' Add all of the title files to the copy list
  252.    AddSectionFilesToCopyList "GPM_DIR", SrcMainDir$, szTitleDir$
  253.    AddSectionFilesToCopyList "EDYS_FROM_GPM_DIR", SrcMainDir$, szTitleDir$
  254.    AddSectionFilesToCopyList "PCXS_FROM_GPM_DIR", SrcMainDir$, szTitleDir$
  255.  
  256.    IF Lang$ = "FRENCH" THEN
  257.     AddSectionFilesToCopyList "LANG_SPEC_FILES", SrcMainDir$+"FRENCH", szTitleDir$
  258.    ELSEIF Lang$ = "GERMAN" THEN        
  259.     AddSectionFilesToCopyList "LANG_SPEC_FILES", SrcMainDir$+"GERMAN", szTitleDir$
  260.    ELSE
  261.     AddSectionFilesToCopyList "LANG_SPEC_FILES", SrcMainDir$, szTitleDir$
  262.    ENDIF
  263.    
  264.    CreateDir MakePath(szTitleDir$,"TRACKS"), cmoNone
  265.    AddSectionFilesToCopyList "TRACKS", SrcMainDir$+"TRACKS", MakePath(szTitleDir$,"TRACKS")
  266.  
  267.    CreateDir MakePath(szTitleDir$,"CARS"), cmoNone
  268.    AddSectionFilesToCopyList "CARS", SrcMainDir$+"CARS", MakePath(szTitleDir$,"CARS")
  269.  
  270.    CreateDir MakePath(szTitleDir$,"SPONS"), cmoNone
  271.    AddSectionFilesToCopyList "SPONS", SrcMainDir$+"SPONS", MakePath(szTitleDir$,"SPONS")
  272.  
  273.    CreateDir MakePath(szTitleDir$,"PART"), cmoNone
  274.    AddSectionFilesToCopyList "PART", SrcMainDir$+"PART", MakePath(szTitleDir$,"PART")
  275.  
  276.    CreateDir MakePath(szTitleDir$,"NEWS"), cmoNone
  277.    AddSectionFilesToCopyList "NEWS", SrcMainDir$+"NEWS", MakePath(szTitleDir$,"NEWS")
  278.  
  279.    CreateDir MakePath(szTitleDir$,"SAVEGAME"), cmoNone
  280.  
  281.  '' Check size
  282.     szExtras$ = "Extra"
  283.     szCosts$ = "Costs"
  284.     szNeededs$ = "Neededs"
  285.     FOR i% = 1 TO 26 STEP 1
  286.         AddListItem szExtras$, "0"
  287.     NEXT i%
  288.     
  289.     '' We assume that VIEWER.INI will take another 4K
  290.     ReplaceListItem szExtras$, ASC(MID$(UCASE$(GetWindowsDir()), 1, 1)) - ASC("A") + 1, STR$(4096)
  291.     
  292.     '' Get amount of space required
  293.     StillNeed& = GetCopyListCost(szExtras$, szCosts$, szNeededs$)
  294.     
  295.     '' Put up a message if there is not enough space
  296.     FOR i% = 1 TO 26 STEP 1
  297.         IF VAL(GetListItem(szNeededs$, i%)) > 0 THEN
  298.     
  299.             SetSymbolValue "String1", LTRIM$(STR$(VAL(GetListItem(szCosts$, i%)) / 1024))
  300.             SetSymbolValue "String2", CHR$(i% - 1 + ASC("A"))
  301.     
  302.             TOOBIG:
  303.     
  304.             sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfoDlgProc", 0, "")
  305.             IF sz$ = "REACTIVATE" THEN
  306.                 GOTO TOOBIG
  307.             END IF
  308.             UIPop 1
  309.             CopyFiles = 0
  310.             GOTO DONTCOPY
  311.         END IF
  312.     NEXT i%
  313.  
  314.     '' Copy the files
  315.     CopyFilesInCopyList
  316.     
  317.     CopyFiles = 1
  318.  
  319. DONTCOPY:
  320.  
  321. END FUNCTION
  322.  
  323. '*************************************************************************
  324. '** Purpose:
  325. '**     Puts up a success dialog
  326. '*************************************************************************
  327.  
  328. SUB ShowSuccess STATIC
  329.  
  330.     SUCCESS:
  331.     
  332.     SetSymbolValue "String1", TitleShortName$
  333.     sz$ = UIStartDlg(CUIDLL$, SUCCESS, "FInfoDlgProc", 0, "")
  334.     IF sz$ = "REACTIVATE" THEN
  335.         GOTO SUCCESS
  336.     END IF
  337.     UIPop 1
  338.     
  339. END SUB
  340.  
  341. '*************************************************************************
  342. '** Purpose:
  343. '**     Creates program manager entries for the title
  344. '*************************************************************************
  345.  
  346. SUB ModifyProgramManager STATIC
  347.  
  348.     '' Create the program manager group
  349.  
  350.     CreateProgmanGroup ProgmanGroup$, "", cmoNone
  351.     ShowProgmanGroup ProgmanGroup$, 1, cmoNone
  352.     CreateProgmanItem ProgmanGroup$, ProgmanItem$, szTitleDir$+"\GPM.EXE",szTitleDir$+"\GPM.ICO",cmoOverwrite
  353.  
  354. ''CreateProgmanItem ProgmanGroup$, "ReadMe", SrcMainDir$+"README.WRI",szTitleDir$+"\README.ICO",cmoOverwrite
  355.  
  356. END SUB
  357.  
  358. '**
  359. '** Purpose:
  360. '**     Appends a file name to the end of a directory path,
  361. '**     inserting a backslash character as needed.
  362. '** Arguments:
  363. '**     szDir$  - full directory path (with optional ending "\")
  364. '**     szFile$ - filename to append to directory
  365. '** Returns:
  366. '**     Resulting fully qualified path name.
  367. '*************************************************************************
  368. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  369.     IF szDir$ = "" THEN
  370.     MakePath = szFile$
  371.     ELSEIF szFile$ = "" THEN
  372.     MakePath = szDir$
  373.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  374.     MakePath = szDir$ + szFile$
  375.     ELSE
  376.     MakePath = szDir$ + "\" + szFile$
  377.     END IF
  378. END FUNCTION
  379.  
  380.  
  381. FUNCTION GetRealWindowsSysDir STATIC AS STRING
  382.     szBuf$ = string$(260, 32)
  383.     cbBuf% = GetRealSystemDir(szBuf$, 260)
  384.     IF cbBuf% = 0 THEN
  385.     ERROR STFERR
  386.     ELSE
  387.     IF cbBuf% > 259 THEN
  388.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  389.         ERROR STFERR
  390.     END IF
  391.     szBuf$ = RTRIM$(szBuf$)
  392.     IF MID$(szBuf$, 1, 1) = "\" THEN
  393.         szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  394.     ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  395.         szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  396.     END IF
  397.     IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  398.         szBuf$ = szBuf$ + "\"
  399.     END IF
  400.     GetRealWindowsSysDir = szBuf$
  401.     END IF
  402.  
  403.     szBuf$ = ""
  404. END FUNCTION
  405.  
  406. SUB UpdateWinG32 (szOrig$) STATIC 
  407.     '
  408.     ' Here we check the version ourselves of wing32.dll, since 
  409.     ' we can't get version checking for Win32 apps from Win16
  410.     '
  411.     FileNew$ = MakePath(szOrig$, "wing32.dll")
  412.     FileOrig$ = MakePath(szOrig$, "wing32.xxx")
  413.     IF IsWin32FileNewer( FileOrig$, FileNew$ ) THEN
  414.     RemoveFile FileOrig$, cmoForce
  415.     ELSE
  416.     RemoveFile FileNew$, cmoForce           ' get rid of new file
  417.     RenameFilePlease FileOrig$,FileNew$     ' put back old file
  418.     END IF
  419. END SUB
  420.  
  421.  
  422.